Tags: add a visual icon picker for tag icons#40
Merged
Conversation
Adds a searchable glyph picker so tag icons can be chosen from a grid instead of typing a Segoe Fluent Icons code point. The free-text field remains as an escape hatch and persistence is unchanged (selection still flows through GlyphInput.Resolve). The catalogue is a curated 50-glyph set in appsettings.json beside the app, re-read each time the picker opens so edits need no rebuild. Core holds the model, provider abstraction and search/selection view model (unit-tested); the App reads the file and presents the dialog. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Jun 1, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Tag icons were set by typing a raw Segoe Fluent Icons glyph or its hex code point — unfriendly, and with no way to browse what's available. This adds a visual picker: a searchable grid of icons you click to choose, driven from the Tags view.
Smoke-tested by Stuart and looks good.
How it works
GlyphPickerDialog— a virtualisedGridViewofFontIcons with a search box that filters by name, keyword or code point (e.g.folder,run,E80F). Pick via single-select + Choose, or double-tap a glyph.GlyphInput.Resolveand stored-character model, so persistence is unchanged.appsettings.jsonbeside the app (code point + friendly name + search keywords). The picker re-reads the file each time it opens, so adding/removing entries takes effect with no rebuild. Code points were grounded against the official Segoe Fluent Icons font list rather than guessed.Architecture
Respects the one-way Core → App boundary:
GlyphCatalogueEntrymodel,IGlyphCatalogueProvider,GlyphPickerViewModel(all search/selection logic), newIShellInteractions.PickGlyphAsync, and aChooseGlyphCommandonTagIconRowViewModel.GlyphCatalogueProvider(reads/resolves the JSON, degrades to an empty catalogue rather than throwing on a bad edit),GlyphPickerDialog, DI registration, and theWindowsShellInteractionsimplementation.Scope kept to the first cut per the TODO: tags only — CLI icons stay image/identicon.
Testing
GlyphPickerViewModelTests(sort, name/keyword/code-point search, no-results, preselection by glyph and typed code point, selection-dropped-on-filter, empty catalogue) andTagIconsViewModelTests(Choose command stores / cancels / no-ops without interactions). All 226 Core tests pass.Notes for later
appsettings.jsonwon't survive an update. Fine for the shipped default; if catalogue customisation becomes a real need,LocalAppDatais the durable home.🤖 Generated with Claude Code